/******************************************************************************
 * Copyright 2024 AutoX. All Rights Reserved.
 *****************************************************************************/

#pragma once

#include<stdio.h>

namespace mcuagent {
#define MCU_LOG_LEVEL_DEBUG 0
#define MCU_LOG_LEVEL_INFO 1
#define MCU_LOG_LEVEL_WARN 2
#define MCU_LOG_LEVEL_ERROR 3
#define MCU_LOG_LEVEL_FATAL 4

extern int g_mcu_log_level;

/**
 * @brief
 *
 * @param
 */
void Mcu_Log_Set_Level(int level);

/**
 * @brief 获取当前日志等级
 *
 * @return
 */
int Mcu_Log_Get_Level(void);


/**
 * @brief 日志打印函数，默认打印到标准输出
 *
 * @param file 源文件名
 * @param func 函数名
 * @param line 行号
 * @param level 日志等级
 */
void Mcu_Log_writter(const char *file, const char *func, const int line, const int level, const char *fmt, ...);

#define Mcu_Log_d(args...) Mcu_Log_writter(__FILE__, __FUNCTION__, __LINE__, MCU_LOG_LEVEL_DEBUG, args)
#define Mcu_Log_i(args...) Mcu_Log_writter(__FILE__, __FUNCTION__, __LINE__, MCU_LOG_LEVEL_INFO, args)
#define Mcu_Log_w(args...) Mcu_Log_writter(__FILE__, __FUNCTION__, __LINE__, MCU_LOG_LEVEL_WARN, args)
#define Mcu_Log_e(args...) Mcu_Log_writter(__FILE__, __FUNCTION__, __LINE__, MCU_LOG_LEVEL_ERROR, args)
#define Mcu_Log_f(args...) Mcu_Log_writter(__FILE__, __FUNCTION__, __LINE__, MCU_LOG_LEVEL_FATAL, args)

}  // namespace mcuagent
